An app can hook into the Web API (REST + Realtime), to allow for external access. A use case would for example be a Raspberry PI that reports it's status to Homey.
Your app's API edpoints are available under the following url: /api/app/com.yourapp.id/
. All endpoints are by default protected, and the requesting user needs permission to your app (which is granted by default after installation). You can override this by setting public: true
.
To add API endpoints to your app, create a file /api.js
in your app's root folder. An example is shown below.
/api.js
module.exports = [
{
method: 'GET',
path: '/',
public: true,
fn: function( args, callback ){
const result = Homey.app.getSomething();
// callback follows ( err, result )
callback( null, result );
// access /?foo=bar as args.query.foo
}
},
{
method: 'POST',
path: '/',
fn: function( args, callback ){
const result = Homey.app.addSomething( args.body );
if( result instanceof Error ) return callback( result );
return callback( null, result );
}
},
{
method: 'PUT',
path: '/:id',
fn: function( args, callback ){
const result = Homey.app.updateSomething( args.params.id, args.body );
if( result instanceof Error ) return callback( result );
return callback( null, result );
}
},
{
method: 'DELETE',
path: '/:id',
fn: function( args, callback ){
const result = Homey.app.deleteSomething( args.params.id );
if( result instanceof Error ) return callback( result );
return callback( null, result );
}
}
]
Homey.app
is the instance of your App.
Parameters
Possible parameters for an API endpoint object are:
key | type | value |
---|---|---|
method | String , Array |
GET , POST , PUT or DELETE , or an array of these values |
path | String |
e.g. / , /:foo , /bar/:foo |
fn | Function |
The function to execute when the call has been made |
public | Boolean |
Set to true to make this endpoint accessible without a token |
role | String |
Set to owner to make this endpoint only accessible to owners |
The args object
The args object has three properties: body
, query
and params
.
Body
This is an object with the body, when your request has method POST
or PUT
. JSON is automatically parsed.
Params
The params object is a set of strings defined in your path
.
Query
The params object is a set of strings that are provided as query parameters, e.g. ?foo=bar
will result in { "foo": "bar" }
.
Realtime
Your app can emit 'realtime' events, which are one-way events to a subscribing client, e.g. a browser showing a Settings page.
/app.js
Homey.ManagerApi.realtime('my_event', 'my_json_stringifyable_value')
.catch( this.error )